package com.cskaoyan.javase.basic._2variable._3detail;

/**
 * 表达式的类型提升
 * 如果表达式当中存在多种数据类型"变量"参与运算(必须存在一个变量参与运算)
 * 由于表达式的运算结果是唯一的
 * 所以结果变量的数据类型将会提升到"最大取值范围"的那个。有以下规则：
 *      1.byte、short、char之间不互相转换，一旦发生运算，一律自动转换为int进行运算，结果是int
 *      2.byte、short、char任何数据类型与int进行计算，一律自动转换为int进行计算，结果是int
 *      3.byte、short、char、int任何数据类型与long进行计算，一律自动转换为long进行计算，结果是long
 *      4.byte、short、char、int、long任何数据类型与float进行计算，一律自动转换为float进行计算，结果是float
 *      5.byte、short、char、int、long、float任何数据类型与double进行计算，一律自动转换为double进行计算，结果是double
 *
 * 特殊的,
 * String作为字符串类型，也可以使用" + "在表达式中参与运算，称之为"字符串的拼接".
 * 任何表达式一旦有字符串拼接运算，那么结果必然是String类型。
 *
 * 总结:
 * 前提: 表达式中必须有一个变量参与运算
 *      表达式的结果是最大取值的范围的那个数据类型(byte,short,char结果一定是int)
 *      如果有String参与,结果就是String
 *
 * @since 17:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        int a = 10;
        byte b = 20;
        char c = 'a';
        int result = a + b + c;

        int result2 = b + c;
        byte d = 30;
        // byte + byte = int
        int result3 = b + d;

        String str = "abc";
        String result4 = a + b + c + str;


    }
}
